GL: Split GL context creation in two phases
authorEmmanuele Bassi <ebassi@gnome.org>
Tue, 27 Jan 2015 21:23:23 +0000 (21:23 +0000)
committerEmmanuele Bassi <ebassi@gnome.org>
Mon, 9 Feb 2015 19:10:04 +0000 (19:10 +0000)
commit22e6f37c9c00ca3e97fbd454774a178473a0c93e
tree02f82bcbe93f6c324245abd7e532aae9ff85e796
parent8f50148a34a4d44da8e0c3022e47aeaba4ee489d
GL: Split GL context creation in two phases

One of the major requests by OpenGL users has been the ability to
specify settings when creating a GL context, like the version to use
or whether the debug support should be enabled.

We have a couple of requirements in terms of API:

 • avoid, if at all possible, the "C arrays of integers with
   attribute, value pairs", which are hard to write and hard
   to bind in non-C languages.
 • allow failing in a recoverable way.
 • do not make the GL context creation API a mess of arguments.

Looking at prior art, it seems that a common pattern is to split the
construction phase in two:

 • a first phase that creates a GL context wrapper object and
   does preliminary checks on the environment.
 • a second phase that creates the backend-specific GL object.

We adopted a similar pattern:

 • gdk_window_create_gl_context() creates a GdkGLContext
 • gdk_gl_context_realize() creates the underlying resources

Calling gdk_gl_context_make_current() also realizes the context, so
simple GL users do not need to care. Advanced users will want to
call gdk_window_create_gl_context(), set up the optional requirements,
and then call gdk_gl_context_realize(). If either of these two steps
fails, it's possible to recover by changing the requirements, or simply
creating a new GdkGLContext instance.

https://bugzilla.gnome.org/show_bug.cgi?id=741946
gdk/gdkglcontext.c
gdk/gdkglcontext.h
gdk/gdkglcontextprivate.h
gdk/gdkwindow.c
gdk/gdkwindow.h
gdk/gdkwindowimpl.h
gdk/wayland/gdkglcontext-wayland.c
gdk/x11/gdkglcontext-x11.c
gtk/gtkglarea.c